é
Panes i se | ISSN 0265-2919
90p
36
oo rs ta
4
IRS.1.15 Aus $2.15 NZ $2.65 SA R2.45 Sing $4.50
- events. One program calculates the amoun
THE ARM’S BUILD-UP Having given the
ACTS ON FILE The use of databases in
education not only provides children with
access to large bodies of information, but
also allows them to develop useful skills in
manipulating data
BUSINESS ON A BUDGET Claimed to be
IBM-compatible and capable of running
MS-DOS based software, the Sanyo MBC-
550 could be considered a real bargain for
business users. We take a look inside
NAMING NAMES When setting up a
database of information, it is essential that
the designer has clear expectations of what
sort of data will be entered and how this will
be used. We look at a basic specification
ON THE SET We take a look at PASCAL’s
use of sets, discuss the order of precedence
of set operators, and develop games of bingo
and snooker using these data structures
FROM MONITOR TO MOUSE A weekly
glossary of computing terms
ANCHORS A WEIGH The module we
develop this week in our simulation game
consists of those parts of the program that
report on the weekly progress of the voyage
LAST CALL We conclude our discussion of
the BBC Micro’s OS by considering three
machine code routines that make use of
of unused memory
pattern cutouts for the base and arm sections
of our robot arm in the previous instalment, -
we now give instructions showing how the
components are assembled
COVER PHOTOGRAPHY BY MARCUS WILSON — SMITH ;
EDUCATION APPLICATION
los
Oh
aaa
>|
e information
TSE,
Type YES or NOYES
You can
see all the DINOSAURS
see one DINOSAUR
ask something else
go back to Choice Page
Press A, B, CorD 6 C_
1)
ae os a fa oe
_ _ cea a :
sms.
nit = jeader m nthe
fe id ‘ol country, the
cecfaly cord a; ng i dren roa be to
| children heard hae banxite miners had- gone on
strike in Surinam | they could quickly discover the
alae | for
understand — frei = ee of . sl ihe
: qu estions es and a5 properly ao organising = th eir “input =
Those rents ~ who, eter aft er : experiencing - : i
database, enter higher education and eventually >
‘the workforce, au surely possess 2 an eee
have seen how databases can
manipulate large bodies of related data
given the fundamentals of proper
structuring. In our second instalment on
databases, we will construct a simple system
based on the idea of an address book,
highlighting the importance of careful
planning in the design stage.
LE a
fa i iit E sea is i ret
One of the major advantages of an old-fashioned
address book is that very little structure is imposed
beyond basic alphabetic ordering. It is flexible in
the sense that you can have entries such as:
PETER GLOVER, 16 Rhiwbinal Cresent,
Cardiff (0222-601227)
— his girlfriend’s called Clair — office: 0222
680545 Ext 160
— call after 4 — moves to new flat in Jan.
Followed by:
GODFREY — 696-1949
Followed by:
GREG — see Ashton-Tate
Using an address book, you are free to list people
under their first names, their surnames or even by
‘indirect addressing’ with ‘pointers’ to other
entries. As soon as a database such as this gets
transferred to a computer, however, a more
systematic approach is usually called for.
- Given that a computerised address book has
some disadvantages compared with the original,
let’s design a format for one that will be flexible
enough to cater for most circumstances. We'll
consider each field in turn, starting with the name.
Names come in two parts: the generic half,
called the surname, and the specific half, called the
forename. In most countries, the forename(s) are
followed by the surname, whereas in China,
Japan, Hungary and some other countries, the
surname precedes the forename. In Japan, there is
only ever a single forename (except that it follows
the surname), while in a Chinese community in
England, it is customary to have an English
forename as well as a Chinese forename. Thus, Li
(surname) Yu Chow (forenames) will be known to
most of his English friends as Paul.
Already, we have plenty of opportunity for
confusion, and we're only considering the name
field. Clearly, we will have to impose some
discipline, and decide whether forenames or
surnames are to come first, and how long an
‘allowable’ name may be. Names may be as short
as Ng or aslongas Cholmondley-Smythe, possibly
1104 THE HOME COMPUTER ADVANCED COURSE
NAMING NAMES
even shorter or longer, so we must always allow for
extreme examples. If the database manager
(DBM) uses fixed length fields, we will have to
choose a field length more than adequate for the
longest name we are likely to encounter. (The
disadvantages of fixed length fields will be
discussed later in the series.)
If we have to impose a format, as indeed we do
when designing a database, it is probably simplest
to use the surname field as the primary key field, so
we will start with the surname and follow it with
one or more forenames. The address also poses
problems. Doubtless, you have seen clip-out
forms in American magazines that ask for your
City, State and Zip Code. British addresses simply
don’t fit into that format. A further complication
arises when you consider that even the ‘Name,
House Number, Street, City, County, Country’
format is not always appropriate. In Japan, for
example, the city is listed first in an address,
followed by the district within the city, followed by
the lot number of the building plot within the
district, with the addressee’s name coming last. »
A BASIC SPECIFICATION
In this simple database example, as in more
complex ones, it is probably not possible to cater
for every conceivable combination, so we will
have to settle for a compromise. Assuming you are
never likely to be communicating with someone
having 16 forenames, let’s see how well the
following basic skeleton would work:
@Surname Field — up to 40 characters
@Forename Field — up to 60 characters
@ Address Field 1st Line — up to 80 characters
@ Address Field 2nd Line — up to 80 characters
@ Address Field 3rd Line — up to 80 characters
@ Address Field 4th Line — up to 80 characters
@ Address Field 5th Line — up to 80 characters
@ Telephone Field — up to 20 characters
®@ Note Field — up to 80 characters
This basic specification should cover most
eventualities, though there may still be problems.
One potential difficulty is the limited length of the
Note field. Another problem is that Country is not
specified as a separate field. Depending on the
length of the address, the country could be found
in the third, fourth or fifth address fields, or not at
all. This would not normally be a problem until we
wanted to search our database using Country as a
key. If your database application had to deal with
many foreign correspondents, it might be better to
design the database with a separate Country field.
Decisions such as these will always be needed at
the design stage.
The DBM you run on your computer will
determine the ease with which you can implement
a specific database on your system. One of the
very simplest DBMs is Caxton’s Card Box. The
program has limited facilities for extracting and
manipulating data, but if your requirements are
straightforward, it will give you the results you
need with the minimum of fuss. Card Box does not
give you a sophisticated programming language to
manipulate fields or records. It does, however,
allow you to extract specific records by entering
simple commands at the keyboard. Using Card
Box to create the database outlined above, you
need only to load the program and follow a simple
sequence of entries.
USING CARD BOX
The first thing you have to dois decide on a format
for the record. This format determines what
information will be stored, how it will be indexed
(that is, which fields will be designated as ‘key’
fields) and how the records will actually appear on
the computer screen or printouts. If we call the
database file ADBOOK, Card Box will create a
format file called ADBOOK.FMT. This can be edited
if required to alter the way the information is
displayed. Alternative format files can also be
created to display the database information in
different ways.
As with most DBMs Card Box allows you to
enter ‘permanent’ text in each of the fields. In the
case of an address book, it is pretty obvious what
the significance of each field is: John Smith is
clearly a name and not part of an address¢
similarly, 0222-680545 is obviously a telephofe
number. In other databases, you might need to be
reminded what the significance of each figid 1s.
This is where ‘permanent’ text comes inflandgy.
Compare these two records:
06116
3995
86
34.75
Dongle with widget nozzle
and
MAKER’S PART NUMBER volo
OUR PART NUMBER cole
NUMBER LEFT IN STOG ce
PRICE Oe
DESCRIPTION Dong vce oe
The informationds identical in both cases, but the
second examplé, with permanent text that appears
in every record, makes mistakes much less likely.
Card Box allows each field to be given one of
four possible indexing attributes: NONE, MAN(ual),
AUTO or ALL. In a stock database, it is unlikely that
we would ever need to use PRICE as a Key field; you
are not likely to ask: “Do you have any parts that
costless than £40 and more than £307?’ It is quite
possible, however, that we would need to know
how many #06116 items are still in stock, so that
MAKER’S PART NUMBER would need to be made 4
key field.
Returning to our address book example, ware
sure to want to search the database by Namg, and
probably by Forename too. Both of these’ would
need to be made key fields. If we were maining a
business, we might also need to search 4ecords Dy
City and possibly even by telephone area dialling
code. It is important to remember that you Cannot
create an efficient database until you have worked
out how you are going to use it. Unlike the old card
indexes, databases require that you anticipate
beforehand how you are likely t6 use them.
Design Elements
Megafinder allows you to degign your Own Toms.
This one was derived from@ne Same 1orm, Supplied
ready-made with the program, used in Our Oiner
screen display
Business Card File
Company?
Address:
Gets: D
Phone:
Keywords:
Comments: L
Layout: {mark fields with ".", CTRL-B ins. ae, CTRL-N del.
line, CTRL-C¥3
COMMAND LINE
1)1S Shows Some O1 ine
commands thal may be used
When ediing 2 desig) Lines
and Chalaciers ay De inceriec
and deleted, and tne (nisied
design Can be Saved 10 disk Dy
pressing UIRL-U
Company: Home Computer Advanced Course
Address: 14 Rathbone Place
Town : LONDON Code:W1P 1DE
Telephone:@1 631 14393
Contact:STEPHEN COOKE \STEVE MALONE
Keywords: PUB * WEEKLY * 1.68
Product received:Subscription
Actions: 25/5/85 renew sub
Find: lindex 1 = ACD
Deelete Ptrint Qtuit
Meatch = OFF ¢arrows> Jtump Cthange
FIELD LENGTH
These are indicated by underjine
CharecierS(_) |e tdi lengin
Ol all he fields in a ionn
determines 10W many (01s
May be Siored in a iile.
Thereiore, | makes sense io
Keep eds 4S 501 ass
practical, Dealing in mind ihe
nature of (he dala inal will be
eniered
FIELD LABELS
These are entered Dy ine user
when designing ie (orn and 0
1S Dr0dT al), ale enlirely (01 ine
user s convenience. (fe
program uses iiem) wien
displaying lormation on ive
Screen Dut takes 10 account Oo!
field iabels when sorting dala,
whicn iL coes using FIELD
IDENTIFIERS
FIELD IDENTIFIERS
Nol io be coniused wilh ie
FieLD LABELS, ne identiiers
celery ine fe order in which
fields will be accessed wien
entering iniormation. Identifiers
also enable fields to be Soried
Separalely oF in groups. Using
Megalinder 5 INDEX Option,
allocating (eld U io Index |
would allow te user 10 Sort
Quickly through ine different
records according to ine
alphabetical arrangement ol
cies
Allow Us To Show You Our Card
Database management Systems nay
offer several different methods of
manipulating information. This screen
dump of Megafinder, a DBM running on
the Apple computer, shows a selected
record from atilenamed Business Cara
and, below this, alist of command
options. Data held by the program can De
sorted into up to tour different INDEXes
to speed information recovery. [he DBI
will also search for a AICH between
input data and stored data, JUMP to
Specified sections of the database (€.9.
to the section holding company names
Starting with IM), CHANGE and DELETE
information, and PRINI a record or
report, either to the screen or a printer
THE HOME COMPUIER ADVANCED COURSE L105
veonononseganenenecanannanssnnse
_At the start of the journey, each crew member's
strength is set at 100 in the array TS(,). The
a makes a weekly. calculation to check it far and the money remaining. The accumulated zg
at line 800, and is increased by the weekly wage |
|
ANCHORS
Having everything we need to se
New World in our tradi }
we can lift anchor,
gggeetten,
there are sufficient stocks of each provision to last
the journey. If supplies ofa particular type run low,
the player is asked if the crew should go onto half
be issued for one week and would reduce the crew.
. pena by five units.
If one type of supply becomes: mie: each
ctew member’s strengthi 1s reduced by 10 for every
~ week they are without it. For example, should the
Serew run out. of fruit and: be on\half rations of
water, their weekly strength rating would decrease.
ae 15; if the water ran out ——- ine pein
a
issued at the Sau of the next eck ae ee et
The health of the crew is given. at th Ae = pesmi ~
of each week by the subroutine at line 4000.-There ~
are five classes of health, which are determined. by
strength rating. The highest classification is very.
healthy (strength rating 75 — 100), followed by
healthy (50 — 75), sick (25 — 50) and very sick (1 -
25). When the strength rating reaches 0, the crew
member dies and is buried at sea, but the wages of
the deceased are still accounted for each week and
paid to the next of kin when the ship returns to
port. This subroutine also gives the wage bill for
1106 THE HOME COMPUTER ADVANCED COURSE
eter can be |
tes hae
: “weeks,
AWEIGH
the coming , week, the total wages for the voyage Som
wage total is reset to zero at the start of this section,
bill each time through the loop. If the bill becomes |
~~rations of that provision: ‘The half rations will only: ~Jarger than the balance of gold (as checked bythe.
subroutine at line 5000), the player is warned that _
\a trading profit will be needed to pay the crew.
If all goes well, the voyage should take eight
but ‘unforeseen circumstances “could
increase. the value. Line 801 creates a string
variable, ‘HS, to\ indicate if the crew are on half
%,
rations. The routine determines the- strength and—.
_type of each crew member by checking the type/
—_ — TS(, ) L sets ab a ot at line 4060
t
|
i
program Sat to line At i0. if there’ iS eon se
the « crew. aie in a anray, fe 4075; prints the
must be ecole in the yan s log
strength rating indicates death, each empty section
on the array would appear to represent a dead
crew member. To avoid this problem, it is reset to
-999 for one week when a rating reaches 0. At the
i
i
j
so
4
Hy
a ee Sn a a a ee ee pn aae
PA(), is greater than zero. If this is not the case then
the strength of each crew member is reduced by a
factor of 10. This reduction is actually handled by
a small subroutine at line 9300 that reduces the
strength rating of each crew member by the value
of WF. This subroutine can therefore be used to
reduce the crew strength by differing amounts. We
: <so...need only to set WF to the desired value before
ae ~ calling: -the subroutine.
Si SS ge == =* Ee the amount of ea remaining 1S greater
a
Nateat orovision |
~yoyag e. ate ao is calculated: mM. line 5180
age
the voyag : tt oc,
Nis given the’ ‘option.of placing ‘the crew on half
_Tations. ‘of that.particular.type-of provision.
status of each provision type (whether on half or
= iS ie ae the projected requirements, the: player. :
} aa
i oe
Da
A full \ ano) is indicated by \the array HR() a =
\ DIMensioned at line'802. When on full rations the. \ a
—- “ts ‘array 6 eitientiis set tot ifth e particular provision ° a <= :
“Cis reduced to half then the c responding airay \ :
, “oo élement jis set to 0.5. If the crew is on half rations . . s
aS See =e thesubroutine at line 9300 \—
| \\ _ the strength rating of each crew membet by five, \
| : Ss The final check made\by this\ routine before, \ ‘
| = uing the ration i s to see if the amount of the | He: —
oS Se a eee vision remainin; is less than the amount to be \
ar ed. If this is the case, then only the amount |
aining is issued and, to indicate that no — | |
visions. are left, the corresponding element Of .)....00c0.0c cfm et
| h provision array is set to -999. |
end of the week it is set back to 0 and the roar | | /
| informs of the death at the start of the next wee Ss
a= ~ Re-setting it — it to ae that ‘rating == — =
4 panne the following weeks. This anetet a j / |
i record of dead crew members at the start of each / / /
Clo oo of rageate eth pee is. =e =. =
checked by lines 4080 to 4098. Their rati 2 -
| ‘matched against the four states of health, an fine / 7 a
4099 vil print the state of each. The strength/ = Ss
hc ~~ type loop ends at 4110, which sends the program . ys Ss
' back to look at the next section of/the aryay. / J x
| The weekly wage bill iS calculated usin another ae we
= : --loop between lines 4120-and-4135, and uused-once- oS eS
| _ for each of the five crew types. Wages for each type —_—— =
| are calculated by the/ equation at line / / oe —
Tamil multiplying the count, for each type by the wa |
ew, | See we a ree eek Aer ely A
rate, and accumulating it/in the variable, iW.
Created and set to 0 at the start of each week by
' tine 4119, WW represents ‘the weekly wage, printed.
Sale tine 4145. Ttis — to the <— for. the
a ; for ‘each mon a several
| checks a are made on the level of rations remaining.
The first of these is a check to ensure that some
rations remain. This can be tested by simply
checking that the amount of the provision, held in
THE HOME COMPUTER ADVANCED COURSE 1107
ERRATUM
In the listing of our adventure
game Digitaya, on page 1020,
BBC Micro users should
change all occurrences of the
variable names LNS() to LS()
and LN toL
PROGRAMMING PROJECTS /SIMULATION GAME
Module Four: The Voyage 25 scent
0 ul e ou a y g 42325 PRINTOAC1)::S¢="BOTTLES OF MEDICINE*":GOSUBS1
a
Length Of Voyage Variable 423 GOSUBS2a0
: 4332 IFOAC2) =@THENS342
40 oe reN Dee ee 4325 PRINTOAC2): :SS="GUNS*" :GOSUB9S100
43460 GOSUBS268
4 4342 IFOA‘3)=Q@THENS352
Main Voyage Loop 4345 PRINTOA(3)::S$="BAGS DOF SALT*":GOSUBS100
800 WT=0 4350 GCSUBS2eaa
@@Q1 HS="N" +REM HALF RATIGN INOICATOR 4352 IFOA(4)=0THENS362
@O2 DIMHR(4):!HR(1)=1SHR(2)=13HR(Z)=11HR64)=1 94355 PRINTOAC4)::S#="BALES OF CLOTH*":GOSUBS100
820 FORWK=1TOJL + REM MAIN VOYAGE LOOP 43660 GOSUBS200
S25 GOSUB49@@a: REM CREW STATUS REPORT $362 IFOACS)=@THENS3S 72
830 GOSUB4200:REM PROVISIONS REPORT 4365 PRINTON(5): 'S#="KNIVES*":GOSUBS100
835 GOSUB4300:REM OTHER GOODS REPORT 4370 GOSUBS200 a
840 GOSUBS2O0:F 2 INTCHRS¢ 147 > 4372 IFOAC6)=OTHENS388
Sde PRINT: PRINT*PRINT 4375 PRINTOAC6)? ':S#="JEWELS*" :GOSUBS100
843 S$="I1T IS ESTIMATED THAT THE VOYAGE *":GOSUBSIO 94380 GOSUBS200:PRINT
a 4382 PRINT"YOQU HAVE"; #:S$=" GOLD PIECES LEFT*":G
844 PRINT"WILL TAKE A FURTHER": JL-WK +1: "WEEKS" OSUBS 108 L
845 GOSUBS208 4384 GOSUBS20a
@46 PRINT: S#=K#!GOSUB9S100 4397 PRINT: S#=K#$:GOSUB9100
e447 GETIS: IF 1#=""THENS47 9398 GETI#: IF I$=""THEN4398
850 GOSUB5S@@@:REM CHECK WAGE BILL 4399 RETURN
S55 GOSUB5190: REM ISSUE RATIONS
889 NEXT WK
Wage Bill Subroutine
Crew Status Report 5@@@ REM CHECK WAGE BILL
50@5 IFWT>MOTHENSO10
4ag@ REM CREW STATUS REPORT 5aa@g GoatTosa99
4010 PRINTCHRS( 1473) S@1i¢i PRINTCHR$(147)
4@20 St=" CAPTAINS LOG*":GOQSUB910@0 5020 PRINT:PRINT!IPRINT
4025 st-" =: ";GOSUBS 106 5@25 St="THE CREW HAVE HEARD A RUMOUR*":GOSUBS100
4030 GOSUBSeaa 5038 S#="THAT YOU DON'T HAVE ENOQUGH*" :GOSUB9160
4035 PRINT"AT THE START OF WEEK": Wik 5035 S#="GOLD TO PAY THEM AT THE ENDx*":GOSUBS100
4040 SH="THE STATE OF THE CREW I[S:x" '+GOSUBS 100 5040 S$="OF THE VOYAGE. *":GOSUB9100
4045 GOSUBS2AMa:PRINT : 5045 GOSUBS2ZQ0:PRINT
4055 PRINT SAQS5SQ S$="THEY ARE GETTING ANGRY !!%*":GOSUB9S100
4@60 FORT=1TO16 5055 GOSURS200:PRINT
4070 IFTS(T,1)=O8THENS110 5Q@6Q@ S#t="LET'S HOPE YOU MANAGE TO MAKE*":GOSUB9S10@
4@75 PRINTC#(TS(T,-1)39:" cP:
4078 IFTS(T,2)=-S999STHENSS="DEAD !1!!11!11)2*":GOTO489 GAGS St="A TRADING PROFIT! *"!:GOSUB91O09
g 5066 GOSUBS20a8
4Q@2Q IFTS(T,2) >75THENS#="VERY HEALTHY) *":GOTQ4099 SATA PRINT: S$$=K$:GOSUBS100
4085 IFTS(T,2) >SOTHENSS="HEALTHY?*":GOTOS8033 5@e0 GETI$: IF1$=""THENSOSa
4a95 IFTS(T,2)>2S5THENSH="SICK | >*x":GOTQ4a9qa 5999 RETLRN
4098 St="VERY SICK |! >"
4a99 GOSUBS100:GOSURS2a0a0 : :
411@ NEXT T issue Rations Subroutine
att) Goebevede re 5106 REM ISSUE RATIONS
5103 PRINTCHRS#( 147)
8 5105 S#=" ISSUING RATIONS*":GOSUB9100
Weekly Wage Bill 51Q6 S#s=" as ee Se x": GOSUBS9100
4118 WhW-6 5107 GOSUBS2Q@:PRINT"WEEK "? WK: PRINT
4120 FORT=1TQ5 : 5108 Hp="N" :
4130 khl=WW+ (CO CT *eWG(T)? S110 FORT-1TO4
4135 NEXT 5112 HR¢T)=1
4140 S#$="WWAGE BILL FOR THE WEEK*"” 'GOSUBS100 5115 IFPACT) >@THENS180
4145 PRINTWW: "GOLD PIECES" 5126 PRINT"NO ":P#C(T):" LEFT! !)!":GOSUB9200
415@ GOSuBSs2eaa 513@ S#="THE CREW IS GETTING WEAKER !!*":GOSUBS91@0
4155 WT=WT+h
416@ S#="TOTAL WAGES FOR VOYAGE SO FAR: *":GOSUBS1@ 5125 WE=109:GOSUB93a0
a 5139 GoTaseasa
4165 PRINTHWT: "GOLD PIECES" 5180 *=(PNCT) eCNd*¢(JIL—-WK+I>
4170 GOSUBS2H90 5185 IFPACT)<XTHENS2o0a
4175 PRINT"MOGNEY LEFT = ":MO: "GOLD PIECES" 5190 GOTOSe272a
418@ PRINT:S$=K#! GOSUBS 100 5200 PRINT"RUNNING SHORT OF ":P$¢T)
d18a@Q GETI#: IF IS=""THENG19G 5205 GoOSuURS2zaa
4199 RETURN 5210 S#="00 YOU WANT TO PUT THE CREW ONx":GOSUB910
a ;
_. 5215 PRINT"HALF RATIONS OF ":P#(T) ,
Provisions Report 5220 INPUTI$: I$=LEFTS(I#, 1)
a2an REM PROVISIONS REPORT 5221 IF 1#<¢>"Y"ANDO I1$<>"N" THEN 5220:REM INPUT ERR
4205 PRINTCHRS( 147) OR .
4206 PRINT"AT THE START OF WEEK": bK:GOSUBS2aa see> iF ie Yee ee 5
4210 S#="YOU HAVE THE FOLLOWING«*":GOSUB9190 Se3@ HR¢T)=.5tHe="¥
4215 S#="PROVISIONS LEFT: *":GOSUBS1aa sere eee
gee be nt eocueseon 5250 S$="THE CREW IS GETTING WEAKER! «":GOSUB9100
SerO X=PNCTI *HRCT)*CN
Sere IFX>PACT) THENK=PACT >?
4225 FORT=1T04
4226 IFPACT)=Q@QRPACT>=-S99THENS240
4230 PRINTPACT):US(T):"S OF ":P#(T) pers FAC TORPACTO
4232 K=INTCPACT)/CCNEPNCT))) 5e80@ IFPA‘CT)=@THENPA‘CT)=-399
4235 PRINT" (ENOUGH FOR":%:" WEEKS)" 5285 PRINTX:US(T):"S OF ":P$(T):" ISSUED"
4239 GOSUBS2aa 5290 PRINT: GOSUB920@: NEXT
424@ NEXT 5295 PRINT: S$=K#:GOSUB910@
-42930 PRINT:S#=K#:GOSUB91@0 S298 GETI#: IF 1$=""THENS298
4295 GETI#$:! IF 1S=""THEN4295 S233 RETURN
4299 RETURN
Reducing Crew Strength
Other Goods Report 9300 REM REDUCE CREW STRENGTHS BY WF
42@@ REM OTHER GOODS REPORT | 9310 FORS1=1T016
43@5 PRINTCHRS( 147) 9320 TS(S1,2)=TS(S1,2)-WF
436 PRINT"AT THE START OF WEEK "+ Wk !GOSUB9200 9330 IFTS(S1,2)<1THENTS(S1,2)=-999
4310 $$="YOU ALSO HAVE: x":GOSUB9 10a 92408 NEXT
4320 PRINT: GOSUB920a 9399 RETURN
1108 THE HOME COMPUTER ADVANCED COURSE
BUSINESS ON A
BUDGET
IBM PC
under £1,000, the Sanyo MBC-550
represents a less expensive addition to the
16-bit Intel 8088-based computer market.
But hardware restrictions and a lack of
specifically designed software, at least for
the present, limit this otherwise sensibly
produced machine.
Despite rapidly falling prices of 16-bit processors,
most computers based around 16-bit technology,
apart from the Sinclair QL, are still very expensive.
It is hard to understand why this is. Sinclair
Research had proved that it is possible to produce
a 16-bit machine profitably for under £400, yet
most comparable micros are well into the four-
figure range. The reason probably lies with the
type of customer who is in the market for such a
machine. These tend to be business users whom
manufacturers seem to believe can afford to pay a
bit extra. This appears to be particularly true of
computers based around the Intel 8088 series of
processors and is probably linked to the sales
policy of the market leader, IBM.
With the standard IBM PC including a single
disk drive costing around £2,000, most
manufacturers building 8088-based micros
consider that by shaving a few hundred pounds off
this price, their customers will regard that as a
bargain. But this still leaves a section of the market
that cannot quite afford many of these, although
still requiring a computer for business use. Until
recently, this area of the market was occupied by
business computers based around the Z80
processor that were equipped with disk drives
enabling them to run CP/M. However, many
manufacturers are now realising the potential of
this neglected area of the business market, and are
endeavouring to produce inexpensive 8088-based
machines.
The Sanyo MBC-550 is one of the first of these
to arrive on the market. Although Sanyo does not
claim it to be compatible with the IBM PC, the
MBC-550 does run the de facto standard MS-
DOS disk filing system. ‘The machine is available
in either a single or twin disk version and sells for
around £1,000.
Like most business machines, the MBC-550
has two separate units, comprising the keyboard
and the main computer. These are sturdily cased in
a combination of metal and plastic, finished in a
metallic silver. The keyboard is divided into three
sections. On the far left are five programmable
function keys which, when used in conjunction
with the Shift key, produce a maximum of 10
functions that vary according to which application
is currently in use. In Basic, these keys can be used
as single keyword entries with commonly used
commands such as LIST, LOAD and RUN.
The typewriter keyboard is well laid out with all
the control keys in their usual positions. The
control keys include a destructive Backspace and
an Insert/Delete key, only one of which is
operational in each application. There is also a
very large Return Key, four times the size of one of
the normal keys. On the nght-hand side of the
Space bar is a Graphics key, which produces
graphics characters on the screen when locked. On
the far right-hand side of the keyboard is a
numeric keypad that can be used as a calculator,
or, if the Number Lock key is pressed, as a cursor
control to enable full screen editing in BASIC.
The computer itself is a large flat box about the
size of a video recorder, that has been made large
enough to accommodate the optional Sanyo
monitor. Like the keyboard, it is mostly
manufactured of sheet metal. On the front of the
computer is the power switch and space for two
disk drives, although our illustration shows the
single drive model. The drives used by the MBC-
550 are of the standard 5zin floppy disk variety.
On the front of each drive is a clip to hold the disk
in position and prevent it from being removed
while the drive head is reading it.
Sibling Differences
The Sanyo MBC-550 is a budget
priced 16-bit business machine
which runs under the popular
MS-DOS operating system.
. There are two versions of the
machine: the MBC-550 is the
single drive version and the dual
drive configuration is known as
the MBC-555. The monitor
shown here is not included in
the basic price of around £1,000
CHRIS STEVENS
THE HOME COMPUTER ADVANCED COURSE 1109
Bi
a
CE
PERIPHERAL INTERFACES
The rear of the computer contains the power
supply and the peripheral interfaces. Looking at
the back of the computer, on the left side, you will
see the power cable, the fuse housing and the earth
connection. On the right, there is a Centronics
parallel interface that will accommodate the
connecting of a printer. A pair of monitor sockets [| = =
are to the right of this. The first isan RGB socket, [|
enabling the computer to run a colour monitor, [=
while the other is a composite video jack that plugs
| into the Sanyo green monochrome monitor.
Above these interfaces are further expansion ports
provided to accommodate extra peripheral
interfaces at a later date.
The Line port above the printer interface is
included for the connection of an RS232C serial
interface that would facilitate the computer
communicating with other computers, via a
modem, or with any other serial device, such as a
printer. Next to that is a port in which an MBC
7 series or Apple-compatible joystick interface [= = = = =
could be fitted. This not only allowsajoysticktobe | Srinterinterlace
fitted but would also enable the computer to be | Thisponaliowsany —
controlled from a trackball, paddle or other | GeMlonics compatible paralie)
external device. There is also an external bus —'[ se
socket allowing other peripheral devices to be | 3
interfaced.
Unlike many manufacturers who object
strongly to users tampering with their machines,
Sanyo has thoughtfully included, in the user
manual, instructions for the fitting of all of these
peripheral interfaces, extra banks of RAM and a
second disk drive if only one is currently fitted. | 0
This is a very welcome inclusion, although the | Perinieral itertace Gi —
guide does mention that users should consult a | co ee LD
qualified engineer if they are at all uncertain. The |~ ee tothe computer
rest of the user manual is equally helpful. It | = = = = =
contains a glossary of computer terms, a full
NideoChip-~
_ Thischipallows any section _
_ of the 256 Kbyte RAM area to
_beusedforvideoRAM
_ storage y
oe e
Be
es
iy
=
.
Bis.
ee
pais
_ The computer's sound —
capability is channelled
1110 THE HOME COMPUTER ADVANCED COURSE _ through this built-in speaker
tutorial description of Sanyo BAsic — including
instructions on using the disk system from BASIC —
and a wealth of technical information.
Sanyo BASIC, a derivative of Microsoft’s version,
is certainly adequate, although it seems to be
somewhat slow in_ processing arithmetical
functions. The 8088 chip has long been noted as
being sluggish when processing maths (hence the
popularity of the 8087 maths co-processor), but
the MBC still seems noticeably slower than most
other 8088-based machines. Similarly, line
drawing on the MBC-550 is also very slow. This is
because Sanyo BAsic lacks a DRAW command,
requiring line drawing to be performed by the
PSET command, which simply turns on one
specified pixel to a particular colour. Thus,
drawing a line involves using a loop.
Apart from standard Microsoft-type
commands such as MIDS, LLIST and CIRCLE, there
are also commands to define and view windows on
the screen. Structured programming is
encouraged by the inclusion of the WHILE. .WEND
conditional statement. Many Sanyo BASIC
keywords can be entered by two or three
keystrokes based around the Control key. For
example, the keyword DIM can be entered by
pressing CTRL, SHIFT and D simultaneously, while
PRINT is entered by pressing CTRL and P. Although
any move towards the simpler entry of BASIC
keywords is to be welcomed, and many of the
shortened keypress commands bear a relationship
to the originals, it is difficult to imagine anyone
attempting to remember the 40 commands
available to write BAsic programs. More likely,
they would attempt to memorise a few of the more
commonly used shorthand versions.
Bundled with the Sanyo MBC-550 is an MS-
DOS system disk, which also contains the Sanyo
BASIC, the widely used WordStar word processing
package and the CalcStar spreadsheet.
Accompanying these packages is a manual giving
full descriptions on how to use them. ,
One would expect the standard MBC-550 —
based around the 8088 chip and running under
MS-DOS — to have little problem running the
vast amount of IBM PC software that is available.
But the fact is that hardware restrictions within the
machine meant that none of the IBM-compatible
packages that we tested on the computer would
run.
There is undoubtedly a market for low-priced
MS-DOS business machines able to run IBM-
compatible software. The question is not whether
they will appear, but when. The Sanyo MBC-550
is a first attempt to break the £1,000 barrier, but
unfortunately its lack of compatibility means that
it will remain isolated. For the small business
owner who only needs a computer to run
competent word processing and spreadsheet
facilities, the MBC-550 seems to be good value.
However, anyone wishing to gain access to a wider
software base than is available for the Sanyo will
have to reconcile themselves to either spending
quite a bit more, or else waiting a little longer.
THE HOME COMPUTER ADVANCED COURSE 1111
LOWER BASE
EXPANDED VIEW
UPPER BASE
FLANGED BALL-RACE
STEEL DOWEL
SIDE ELEVATION
6mm BRASS TUBING
6mm BRASS TUBING
THE ARMS
BUILD-UP
6mm CROSS PIECE
_ 6mm CROSS PIECE
| SIDE PIECE
LOWER BASE
SPACER
1112 THE HOME COMPUTER ADVANCED COURSE
After listing the necessary parts for our
Workshop robot in_ the previous
instalments, we can now _ begin its
construction. Here we assemble the main
body, the upper and lower arm sections, as
well as make the elbow and shoulder joints
using the previously cut out parts.
a fas 3
ee
Benne
a
a 2 se
_
44°
. —— — sprees
. oe a
9 ae & SS
4 } d als p ae
k : q
a
SS
Th
‘4mm EXTERNAL
5mm EXTERNAL ar
DIAMETER TUBING.
DIAMETER TUBING
_. 6mm CROSS
PIECES —
— SERVO MOTOR
— SERVO ARM
4
-GLUEING WRIST SPACER -
6mm WRIST SPACER,
| ANDNUT
5mm EXTERNAL
DIAMETER TUBING =
_OWER ARM PIECE
THE HOME COMPUTER ADVANCED COURSE 1113
MAINBODY
SIDEPIECE
Step 3: Upper A
| Assembly
'T’ PIECE
(Q) MACHINE SCREW
| UPPER ARM PIECE
‘4mm EXTERNAL
DIAMETER TUBING
m|
KEVIN JONES
In addition to pascav’s familiar data
structures, such as arrays and files, the
language also includes sets and records. We
examine the first of these structured types,
as well as summarising the levels of
precedence for the PASCAL operators we have
examined so far.
We often talk about a computer’s character set.
But what precisely is meant by a set and how does
it differ from an array? The main characteristic ofa
set is that it is a collection of objects that can be
processed as a single entity, rather than each
element having to be accessed individually. A
practical example would be the set of all people
who program in PASCAL, or the letters of the
alphabet that are vowels. There is often no
particular ordering involved, with the only
question of interest being: is this particular object a
_ member of the set or not?
_ For reasons of efficient implementation, PASCAL
places some restrictions on sets. They can only
have simple scalar types as their members — not
arrays or other structured data — and there will be
an (implementation-defined) upper limit on the
range allowed for this “base’ type. The syntax is
straightforward, for example:
TYPE
Numbers =SET OFO. .127;
Alphabet =SETOF‘A’.. ‘2’;
ColourMix = SET OF ( Red, Green, Blue ):
The range of possible values of the ordinal base
type of the set may be expressed with the same
syntax as for subrange types.
Set variables are declared in the VAR declaration
part, in exactly the same way as all variables in
PASCAL, and may appear in statements literally (i.e:
as ‘literals’) enclosed within square brackets, thus:
VAR
codes : Numbers;
palette : ColourMix;
BEGIN
codes :=[0.. 2, 4, 8, 16, 32, 64 ]:
palette := [Red . . Blue ]; { etc. }
This segment would initialise the set codes to
contain only the numbers 0 to 2 inclusive and 4, 8
and so on, as listed. Because there is no inherent
order in the set itself (as opposed to its base type),
we could equally well express this set as [64, 32, 16,
8, 4, 0..2] but notice that the subrange 2. . 0
(illegal in an actual subrange definition) would
merely indicate an empty range. In fact, any set
can be initialised to an empty set of its type with the
1114 THE HOME COMPUTER ADVANCED COURSE
statement: AnySet :=| ], which gives rise to the only
exception to the general rule in pascAL, namely,
the type of any literal is known by inspection.
Without at least one member of the set appearing
literally, neither we nor the compiler can
determine its type. Fortunately, the empty set can
only occur in assignments (as in the example) or
expressions in which the other identifiers will have
already had their types declared. This does mean,
however, that the empty set is a subset of every set
- type, but that’s only natural.
SET OPERATORS
One of the most useful operators PASCAL provides
for set structures is, iike DIV and MOD, a reserved
word: IN. It enables us to test for membership of a
set, and is a relational operator that takes two
operands. The left-hand side must be an
expression evaluating to one of the possible
members of the set — in other words, a value of the
set’s base type — and the right-hand side may be a
set variable or set literal. ‘The whole expression will
give a Boolean result — true if the value is a
member of the set and false otherwise.
So: N IN codes and Green IN palette are legal
Boolean expressions. The usual test for a character
being a digit could be written as:
IF (c >= ‘0’ ) AND (c <=‘9’) THEN...
How much less confusing to test for c’s value being
a member of the set of characters were interested
in, using:
CUED 2278 2) AEN
Or perhaps, if we are writing a program to play a
card game: 7
TYPE
rank =(deuce, three, four, five, six, seven, eight,
nine, ten, Jack, Queen, King, Ace ):
CardSet = SET OF rank;
VAR
card : rank;
pictures: CardSet;
BEGIN
pictures :=( Jack . . Ace ):
IF card IN pictures THEN { etc. }
Contrast this last example with:
IF (card = Jack) OR (card = Queen) OR (card = King)
UB
_ There are also operations defined on sets as a
whole in PASCAL. These are set intersection, union
and difference. If B is the set of all BAsic
programmers and P represents PASCAL people,
then the intersection of the two sets is the set of
programmers using both Basic and PASCAL. The
union of P and B is the set of people who program
in either PASCAL Or BASIC — thatis, the combination
of the two sets.
Set difference is, as it suggests, the result of
removing or subtracting all members of one
set' from the other. Thus, in pascaL notation,
nnn annem
IAN McKINNELL
oe
a
ee
P — B represents all those who program in PASCAL
but not in Basic. Similarly, the notation used for
union is P + B, and for intersection P * B. These
operator symbols happen to be the same as the
well-known arithmetic operators, but the different
class of operations should not be confused.
Actuaily, the reason they appear so naturally in the
context of set operations is that they represent the
bit testing that is involved here.
Imagine a set of eight elements. The presence of
a particular member could be indicated by setting
the appropriate bit in an 8-bit pattern (one byte);
absence from the set can be set similarly by a zero.
Membership tests, then, just require a mask or bit
test, a set union becomes an OR operation and
intersection will be a simple AND. These
operations are invariably available at machine
code level, so that the pAscaL compiler is able to
provide set data structures and their associated
operations very efficiently. The memory overhead
is also minimal, and especially when the size of sets
can be kept within a computer’s word size ( on 32-
bit and over machines, for example), set
Operations can be the most efficiently
implemented ones in PASCAL. |
ORDER OF PRECEDENCE |
We can now conveniently summarise, all the
operators in PASCAL. Those we haven't dealt with
explicitly are all familiar from other languages, and
PASCAL keeps things extremely simple by only
having four levels of operator precedence.
Naturally, the ‘unary’ or ‘monadic’ operators take
precedence over all the others. These are the
symbols + and —, which indicate the sign of a
number and the Boolean negation operator NOT.
The second precedence level has all the
‘multiplication’ operators (including the division
symbols) followed by addition/subtraction and,
at the lowest level of precedence, all the relational
operators including IN.
Notice that the other two Boolean operators
(AND and OR) are treated correctly as multiplying
and adding operators, respectively. This faithfully
echoes the actual Boolean algebra involved, and
means that many relational tests are bracketed to
override this precedence. Otherwise, for instance:
IFN > OANDN < 10 THEN .. will give a compile
time error, because the expression 0 AND N (which
should be evaluated first) attempts to combine two
integer operands with a Boolean operator.
Perhaps this is another habit you've acquired
from BAsic? If so, now is the time to start breaking
it! Naturally, any operators of the same
precedence level are evaluated from left to right, as
usual. ‘The symbol used for assignment (:=) has a
lower precedence than any of the above operators,
as the expression on the right-hand side of an
assignment must be fully evaluated before the
assignment is made. One word of caution: you can
never assume that any part of an expression won't
be evaluated, so that: IF (N > 0) AND (K/N < 10
THEN ... could crash a program if N was zero
(creating a division by zero error !).
THE HOME COMPUTER ADVANCED COURSE 1115
1116 THE HOME COMPUTER ADVANCED COURSE
Bingo!!
A Bingo card may best be represented by a set.
Although the base elements (integers in the range
one to 90) are ordered, the only vital consideration Is
whether or not a called number is on the card. In
PASCAL parlance: ‘number IN Card’ is either true or
false.
The program simulates a game of Bingo by first
reading the card numbers from the keyboard and
then, as each number is ‘called’, testing for the set
of called numbers being a superset of the card. The
expression Card—Called will become the empty set
when every member of Card is also in the set Called.
PROGRAM Bingo ( input, output );
CONST
Columns = 40; { to suit VDU }
HalfWay = 25; { . }
TYPE
Bingo = SET OF 1 .. 90;
VAR
count : | we 10;
Allowed,
Called,
Empty,
Card : Bingo;
number : integer;
House : boolean;
BEGIN
Empty := [ ];
Allowed := [1 .. 90 ];
WriteLn ( ’*** BINGO ***’ : HalfWay );
WriteLn;
WriteLn ( ‘Enter the 15 card numbers,’ );
WriteLn ( ‘(each followed by RETURN) :’ );
Card := Empty;
FOR count := 1 TO 15 DO
Adding a member to a set that already contains it
leaves the set unchanged, aS does ‘removing a
non-member. Notice that we cannot add a member
to a set directly; but by creating a one-element set by
enclosing the number within square brackets, we
can obtain the union of two sets.
As it stands, the program will allow duplicated
card entries, and will accept an illegal number
outside the range one to 90, causing a run-time
error. As an exercise, can you think of a simple way
of adding loop constructs to prevent both these
anomalies and to reject numbers that have already
been called?
write ( count : 10, :7? );
ReadLn ( number );
Card := Card + [ number |]
END;
WriteLn;
WriteLn ( “EYES DOWN !’ : HalfWay );
WriteLn;
WriteLn ( “Now call each number : “ );
Called := Empty;
REPEAT
write ( °? ” : HalfWay );
ReadLn ( number );
Called := Called + [ number ];
House := Card - Called = Empty
UNTIL House;
WriteLn;
WriteLn ( ‘Congratulations !’ : HalfWay );
WriteLn ( ‘Your numbers were :’ );
WriteLn;
FOR number := 1 TO 90 DO
IF number IN Card THEN
write ( number : Columns DIV 8 )
~
Wa BP,
Noh gs cai ag See
S
eytetes
mai eee new Reeth
ty Be BOON PEK Ee ee SEE
Rik CRORE Cae tg ese
6g BO om ge OS. ae
By Ug Bias Oats Oe
Bg. Nag gg eS RIB ee
eg Tg ee
we Seb S eee tae oe ee am 2
Rg E Og Re eg tbs Pe Re ea
Bp OS OR ip Bie Oks ide Bee
ROG CR RS ee tg Oe g Ok
Ce as ae a ON INA WR Bi
Op Og tig Sie. Ug MR dy BS.
PL ar ete tale aie Oh NO Ie BD
Seg Rae og oe &. &. *: a ee Rea
Be She tO hog tay hee i
8.
ee eee *
*
Stents
:
te
ake
:
eee
ss
IAN McKINNELL
Our extended look at the BBC Micro’s
operating system has shown how the various
ROM routines that make up the OS can be
used by the programmer to augment or
totally alter the way in which the OS
responds to certain situations. Here, we
round up the series with several programs
that illustrate the uses of OS calls and point
to some of their limitations.
aunt
The program we gave as an exercise in the previous
instalment (see page 1100), demonstrates how we
an intercept one of the OS vectors in order to
change the way in which the OS responds to a
certain event. The program alters the contents of
OSWRCHV — the vector that holds the address of
the OSWRCHV routine. This vector is held at
addresses &20E and &20F.
One of the functions of OSWRCH is to take BASIC
text and print it to the screen when a program is
listed. The main function of the machine code in
our program is to look at the ASCII code of each
character as it passes through the accumulator
_ during the OSWRCH routine. If the ASCII code is
between 64 and 91 (the character is a capital
letter), then 32 is added to the value to give its
lower case equivalent. In this way, the program
actually forms a ‘wedge’ that will be executed each
time the operating system calls OSWRCH. After our
code has been executed, control is passed to the
real OSWRCH routine using a JMP instruction with
the old contents of OSWRCHV. After running th
program, all capital letters in a program listed t
the screen or typed in at the keyboard will b
converted to lower case letters by our wedg
routine. Hitting BREAK restores OSWRCHV to it
normal value.
MEMORY USE PROGRAM
This listing is another utility program, which keep
an eye on the use of memory while your
programming. The expression:
HIMEM—(?2+256* 73
gives the amount of memory remaining after th
program and variables have taken up their shar
(locations 2 and 3 hold the address of the top of the
BASIC variables table). The expression thus
indicates how much memory is left for you to work
with. However, continuously PRINTing this value
can be a little tedious. The routine, therefore, uses
the Character enters input buffer event (see page
1099) to evaluate this expression each time a key is
pressed, and sounds a ‘beep’ when the remaining
BASIC memory falls below a certain level. The
program is triggered by a keypress event and will
continue to operate in the background while you
type in your program.
The first task of the program is for the user to
determine the threshold at which he wants to be
reminded of failing memory resources. This is
done by PROCselect-memory, which sets up the
threshold in lo-byte/hi-byte form. ‘The program is
located at address &0A00, and — as usual for
programs that use events — we must first save the
contents of all the registers by pushing them onto
the stack. After the subroutine that carries out this
job is called, the registers are restored and an RTS is
executed to return the control of the program to
where it was when the event occurred.
The main subroutine calls a further two
subroutines to evaluate the amount of memory
remaining. The inc routine takes the value stored in
locations 2 and 3 and adds the lo-byte and hi-byte
of the threshold to it, storing the result in addresses
&70 and &71. The sub routine then carries out a 16-
aa
aca
F Hea
Ran a
Seay ane ‘ Rane
gic Sit a 3 Beaune f Seana Raa
Eotnnenarnanaes
a ary
Pan fa i
Baaucs
Soa
aegis
Sameer
Sa
man OY 6
ee
ea G 3
teens ie & es Pear Brennan aa ist
A
a
his aa
Baraat
aati
sats
THE HOME COMPUTER ADVANCED COURSE 1117
Renae
Sa
Sate
bit calculation, subtracting the contents of
&70 and &71 from HIMEM. The value of HIMEM
is stored on zero page in locations &06 and &07.
Note here how absolute memory locations have
been used — mainly because these locations have
had these uses in all of the versions of BBC Basic.
After this subtraction has been performed, line
490 checks the sign of the result. If it is a positive .
result, it indicates that there is still more than the
previously set threshold of bytes of memory
remaining. If the result is negative, there is
insufficient memory left, and so it’s time to make a
noise about it. The OSWRCH with A=7 call is then
made to cause the beep.
The two programs we have discussed so far are
simple examples of potentially useful applications.
ie advantage of using the operating system calls
tly is that we can generate event-driven code
acility unavailable 1 ic. The following
oth use eve
BACKGROUND MUSIC
This program uses the Interval timer has ‘timed out
event to play a series of musical notes while the
computer performs other tasks. As the event
routine runs in the background, you can save a
program, edit it, list it or run a different program,
while the notes are played throughout. You could
expand this program to play a tune while a game
program runs, for example. The tune will even be
played during disk operations!
The program is assembled to start at address
&0C00. The first section is an initialisation routine
that performs the following tasks. The event
vector EVENTV, at addresses &220 and &221, is
changed to point to our routine. OSBYTE 14 with X=o
is then called to enable the Interval timer has ‘timed
out’ event. A ‘note counter’ at location &70 is
initialised to zero, and finally the event timer is
1118 THE HOME COMPUTER ADVANCED COURSE
started by a call to the clock subroutine.
The first task of the event-handling routine is to
save the CPU registers on the stack. A subroutine
is then called to play a single note and the timer
clock is reset. Finally, the registers are restored.
One thing to note here is that the register save and
restore parts of the program are standard to all our
event-handling routines, and we simply change
the code between these two blocks of instructions.
Let’s now examine the various parts of the
subroutine that play the notes. One note is played,
selected from a table of notes, every time the event
timer crosses zero. The table of notes, called
notetable, is simply a series of bytes holding the
pitch information for the five notes that we want tc
play. A counter is used to determine which of the
five notes is to be played, and the value is held in
&70. The pitch value is retrieved and then stored at
the appropriate place within soundtable, which is
simply the parameter block for the OSWORD
routine that we will later use to generate the sound.
The counter is then incremented, thus pointing it
to the next position within the note table for the
next time the routine is entered. As you've only got
five notes in the table, as soon as location &/0
holds the value five it is reset to zero.
The subroutine clock uses OSWORD with A=4 to
set the event timer running. The area of memory
called time holds the value that is to be stored in the -
timer registers, thus specifying the time between
the notes played. The sound subroutine performs
the equivalent of a SOUND command, using.
OSWORD with A=7; soundtable is the parameter
block for this OSWORD call. The data for notetable
and soundtable is set up by the BAsic statements in
lines 840 and 850.
Pressing BREAK will stop this program, by
resetting the EVENTV contents. However, calling
the initialise routine will set things off again.
GRAPHICS MOVEMENT
Our final program shows how we can use events to
move a simple graphics shape, in this case a
rectangle, across the screen, one position for each
‘event. The frequency of movement therefore
depends upon the value put into the event timer.
This value is set up in line 1260. The definition of
the shape to be moved, in terms of PLOT numbers,
is stored in shapetable and is set up from a DATA
statement — line 1220 POKEing the appropriate
values in. Lines 1230 to 1250 set up EVENTV to
point to our program and enable the appropriate
event. Now let’s consider the machine code
involved.
This is stored in memory at the address
specified by code%. Lines 200 to 230 do the usual
register save operation, and lines 250 to 280 do the
work by a series of subroutine calls. Finally, we
restore the registers and execute an RTS. Lines 370
to 440 save the current status of the graphics
cursor and the current GCOL in use so that it can be
restored after we've handled the event.
Lines 460 to 520 deal with the movement of the
shape. Lines 540 to 630 restore the graphics
colours and the graphics cursor position to the
state they were in when we entered the routine.
Lines 650 to 720 use the OSWRCH routine to
carry out the equivalent of a BAsic MOVE command
to the desired x and y positions. These positions
are stored in xpos and xpos+1 for the x co-ordinate
and ypos and ypos+1 for the desired y co-ordinate.
Lines 740 to 800 draw the shape, again using
OSWRCH. The Y register is used as an index register
in order to access the table of bytes that represents
the shape (shapetable). The bytes are sent as a
stream through OSWRCH.
As the shape moves across the screen, it’s clear
that there must be routines to update the x and y
positions each time the event occurs. This is done
by the routines incx and incy in lines 820 to 900.
Once the box reaches the top of the screen, the
routine overflow resets the x and y co-ordinates to
zero. The routine clock uses OSWORD with A=4 to set
the event timer off, and the routine gcol does the
equivalent operation to a BAsic GCOL3,1
There are several problems associated with this
program. Run the code, and as long as the screen
doesn’t scroll, the shape will move rather
uncertainly across the screen. You can perform
other operations while this is happening, and all is
well. However, speed up the movement, by
increasing the value in the time area of memory,
and although the shape will move when you list
part of the program, there could well be unusual
characters appearing on the screen. The reason for
this is simple — conflict between our routine,
which is entered when an event occurs, and the
usual OS behaviour when listing. Both require the
use of OSWRCH and what happens is that when the
OS listing routine is interrupted by our event,
OSWRCH is left in a state that the listing routine is
not expecting.
If OSWRCH is interrupted, and is called by the
interrupting routine, then one exit from the
interrupting routine’s OSWRCH call is unavailable.
OSWRCH is said to be non-reentrant. This is why
Acorn suggest that it is unwise to use OS routines
in event- and interrupt-handling routines. You
can use them, but you are cautioned to proceed
with care. These problems could be overcome by
not using any of the OS routines while in an
interrupt- or event-handling routine. There are
alternatives, such as entering data directly into the
screen RAM area to draw graphics, and this is one
of the few times where side-stepping ROM
routine calls is a good idea.
THE HOME COMPUTER ADVANCED COURSE 1119
Monitoring The
Situation
There are two types of
monitor: the ‘green
screen’ monochrome
monitor (most
commonly used on
business machines
because itis the
easiest on the eye, and
therefore the most
suitable for long
periods of accounting
or word processing).
and the colour monitor.
The latter category can
be further subdivided
into two groups. RGB
monitors have each of the main
colour signals sent down separate
cables for maximum definition,
whereas composite video
monitors send all the signals
down a single line
MONITOR
In hardware terms, a monitor is a visual display
unit similar to an ordinary cathode ray tube
television except that it has no channel selecting
facility — it is a dedicated machine to provide a
visual display of the video signal from a computer.
Monitors produce a much better picture than a
standard television screen because the signals
from the computer do not have to be ‘modulated’,
or adapted to mimic the signal that the television
receives from an aerial. Instead, a monitor can
process the signal directly into the picture that
appears on the screen.
The two most popular types of signals used in
monitors are ‘composite video’ and ‘RGB’. A
composite video monitor generally has a bayonet-
type socket fitted that is a common feature on
many video recorders. The colour signals arrive
from the computer together and the colours are
decoded within the monitor itself. An RGB (red,
green, blue) monitor signal is usually sent down a
DIN-type socket although there are variations
such as the use of Peri plugs. The signal is decoded
into the separate colours before it is sent to the
monitor, which are then transmitted along three
individual lines. An RGB monitor generally
provides a better picture than a composite video
monitor.
In software terms, a monitor is a program
controlling several independent programs that
may be running at the same time. The monitor will
allocate priorities in processor and peripheral time
and oversee the progress of each of the programs,
passing data between them where necessary.
Where a monitor is governing an entire system, the
term can be referred to as an ‘operating system’ or
‘supervisor’.
MOTHER BOARD
The mother boardis the main printed circuit board
within a computer. It contains all of the major
components and systems that are used and often
functions without the need for any other boards.
The components may consist of the central
processing unit, the main memory and the input/
output system. Mother boards generally contain
1120 THE HOME COMPUTER ADVANCED COURSE
slots which allow other boards to be inserted.
These additional boards, known as ‘daughter
boards’, contain upgrade modules that perform
specific additional functions, such as providing
additional RAM, an 80-column or colour card, or
a printer or disk interface.
In the early days of home computing, when
computers were the preserve of electronics
enthusiasts, fitting additional boards to a
computer became something of a craze as
hobbyists competed with each other to customise
their machines. It reached the stage where owners
of Apple computers could no longer fit the lids on
their computers because of all the boards that had
been added! Although this still occurs among
many enthusiasts, the main customers for
daughter boards today are businesses who require
additional boards to run specific applications on
their personal computers.
MOUSE
Over the past few years the term mouse has come
to mean two completely different things. To the
home micro user, it refers to a device that is moved
around a desk top, which in tum moves a
corresponding cursor around the computer’s
screen. When the cursor is above acommand or an
icon, the user presses a button on the mouse. ‘This
sends a RETURN signal to the computer, which then -
executes the command indicated.
Typically, this device works by having a ball
bearing on the bottom of the mouse and a shaft
encoder attached to a pair of encoding wheels in
contact with the ball bearing. As the bearing rolls
across the desk, its movements will be mirrored by
the wheels and transmitted through the shaft
encoder to an electrical sensor, which sends a
digital signal to the computer.
Until 1984, a mouse was considered something
of a gimmick among computer users. However,
with the launch of the Apple Macintosh, the
industry began to realise how useful these devices
could be and by 1985 there was a rush to produce
Macintosh mouse-type packages for an increasing
number of machines (see page 1050).
A mouse can also refer to an ‘intelligent’ robotic
device that can find its way around a previously
unseen maze. Generally, the mouse will have
some kind of sensor system on the front to detect.
collisions, and will either have a system of on-
board logic, enabling it to decide in which
direction to move next, or else it will be attached to
a computer that will provide the processing for it.
The mouse moves through a maze until it
encounters a wall, at which point it will attempt to
move in a different direction until it finds a way
through to the centre of the maze. On its first run,
the mouse will ‘remember’ the directions it has
travelled, and should be able to find the quickest
route through the maze on the second. Robot mice
are becoming increasingly popular with robotics
enthusiasts and there are now world-wide
championships, held annually, to find the world’s
fastest mouse (see page 721).
~.
; : | pCR SEN ES ST FSD THAR A TS LT STE
pra
ae
EEN fe
AF oo
UG ay Ga AW A'S DE G7 aa Nt ty
Nits tN a
THE HOME COMPUTER ADVANCED COURSE ARE
Be bh ae oe ee. ae ae =—P\ eS
fv Ne NT ee ON TN
¥QeG RG GAA
Dee Gy Ol Ee Sy a ww
IE
SS OSs He ae
eS) ee AY
122 ATI
EE AS a
Ret bE eRURERL Y
ALLE _
Ze
arte
a
‘RARER
SELENE
aie
oo
enone
—— peice tenn
SCR ASAE AETET
SSR MHA ABAS
Ph diessshshtataiatouckonnen
HoMEROAHRS SN Va eH ataesaetbrtAtSAsctsatt on
oti
ee is
EER ET
=
Be
ee
|
|
|
i
soon
co
GEL LER TE
a
see
ents
ENE SLAL ELCRIBE LAR ARES A LLLP AT TTB
aA PREMISE ESET
RAN ALR PEAR ELI IE EE TR EIGET ETT EE BRO EET
aaa
Ean anes
ea
GUARANTEE GUARANTEE GUARANTEE GUARANTEE GUARANTEE
~~ += =—=—=—se GUARANTEE GUARANTEE GUARANTEE G __ GUARANTEE
“Do not affix Postage Stamps f pasted in oN nes ene ea en, ea | ees...
_ Gt. Britain, Channel Islands or N. Ireland.
2G youare notentirely _
_ andit willbe either
_exchanged,or,ifyou {f
prefer, yourmoney will }
- berefundedinfull.
GUARANTEE GUARANTEE GUARANTEE GUARANTEE GUARANTEE
GUARANTEE GUARANTEE GUARANTEE GUARANTEE GUARANTEE
. . GUARANTEE GUARANTEE